package cn.lg.soar.system.api.service;

import cn.lg.soar.common.util.AssertUtil;
import cn.lg.soar.system.api.enums.TemplateTypeEnum;
import cn.lg.soar.system.api.model.TemplateCache;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

/**
 * @author luguoxiang
 * @date 2021-08-11
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public interface ITemplateApi {

    TemplateCache getCacheById(Long id);

    TemplateCache getCacheByCode(String code);

    /**
     * 获取模板内容
     * @param code 编码
     * @return
     */
    default String getContentAsText(Long id) {
        TemplateCache templateCache = getCacheById(id);
        if (templateCache == null) {
            return null;
        }
        return templateCache.getContent();
    }

    /**
     * 获取模板内容
     * @param code 编码
     * @return
     */
    default InputStream getContentAsFile(Long id) {
        TemplateCache templateCache = getCacheById(id);
        if (templateCache == null) {
            return null;
        }
        AssertUtil.isTrue(TemplateTypeEnum.file.eq(templateCache.getType()), "该模板不是文件类型");
        try {
            return new URL(templateCache.getContent()).openStream();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 获取模板内容
     * @param code 编码
     * @return
     */
    default String getContentAsText(String code) {
        TemplateCache templateCache = getCacheByCode(code);
        if (templateCache == null) {
            return null;
        }
        return templateCache.getContent();
    }

    /**
     * 获取模板内容
     * @param code 编码
     * @return
     */
    default InputStream getContentAsFile(String code) {
        TemplateCache templateCache = getCacheByCode(code);
        if (templateCache == null) {
            return null;
        }
        AssertUtil.isTrue(TemplateTypeEnum.file.eq(templateCache.getType()), "该模板不是文件类型");
        try {
            return new URL(templateCache.getContent()).openStream();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

}
